#!/bin/bash

# ===== 配置区域 =====
PACKAGE_NAME="vischat"
# ===================

# 显示使用说明
function show_help() {
    echo "用法: $0 [选项] <模块名称>"
    echo ""
    echo "选项:"
    echo "  -s, --subdir <子目录>    指定子目录路径"
    echo "  -p, --path <项目路径>    指定Flutter项目路径（默认为当前目录）"
    echo "  -n, --no-routes          跳过路由生成"
    echo "  -h, --help               显示帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 -s auth login         在modules/auth/下创建login模块"
    echo "  $0 -p ~/my_project home  在指定项目创建home模块"
}

# 参数解析
POSITIONAL_ARGS=()
SKIP_ROUTES=false

while [[ $# -gt 0 ]]; do
    case $1 in
        -s|--subdir)
            SUB_DIRECTORY="$2"
            shift
            shift
            ;;
        -p|--path)
            PROJECT_PATH="$2"
            shift
            shift
            ;;
        -n|--no-routes)
            SKIP_ROUTES=true
            shift
            ;;
        -h|--help)
            show_help
            exit 0
            ;;
        -*|--*)
            echo "错误: 未知选项 $1"
            show_help
            exit 1
            ;;
        *)
            POSITIONAL_ARGS+=("$1")
            shift
            ;;
    esac
done

# 设置模块名称
if [ ${#POSITIONAL_ARGS[@]} -eq 0 ]; then
    echo "错误: 必须指定模块名称"
    show_help
    exit 1
fi
MODULE_NAME=${POSITIONAL_ARGS[0]}

# 转换模块名为首字母大写
MODULE_CAPITALIZED=$(echo "$MODULE_NAME" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')

# 验证项目路径
if [ ! -d "$PROJECT_PATH" ]; then
    echo "错误: 项目路径 '$PROJECT_PATH' 不存在"
    exit 1
fi

# 验证lib目录
LIB_PATH="$PROJECT_PATH/lib"
if [ ! -d "$LIB_PATH" ]; then
    echo "错误: 项目路径中未找到 'lib' 目录"
    exit 1
fi

# 设置基础路径
MODULES_PATH="$LIB_PATH/modules"

# 如果有子目录参数，则添加到路径中
if [ -n "$SUB_DIRECTORY" ]; then
    MODULES_PATH="$MODULES_PATH/$SUB_DIRECTORY"
fi

# 最终模块路径
MODULE_PATH="$MODULES_PATH/$MODULE_NAME"

# 创建目录
mkdir -p "$MODULE_PATH" || {
    echo "错误: 无法创建目录 $MODULE_PATH"
    exit 1
}
echo "已创建目录: $MODULE_PATH"

# 构建模块的导入路径
MODULE_IMPORT_PATH="modules"
if [ -n "$SUB_DIRECTORY" ]; then
    MODULE_IMPORT_PATH="$MODULE_IMPORT_PATH/$SUB_DIRECTORY"
fi
MODULE_IMPORT_PATH="$MODULE_IMPORT_PATH/$MODULE_NAME"

# 创建controller文件
CONTROLLER_CONTENT=$(cat <<EOF
import 'package:get/get.dart';

class ${MODULE_CAPITALIZED}Controller extends GetxController {

}
EOF
)

CONTROLLER_PATH="$MODULE_PATH/${MODULE_NAME}_controller.dart"
echo "$CONTROLLER_CONTENT" > "$CONTROLLER_PATH" || {
    echo "错误: 无法创建controller文件"
    exit 1
}
echo "已创建controller: $CONTROLLER_PATH"

# 创建binding文件
BINDING_CONTENT=$(cat <<EOF
import 'package:get/get.dart';
import 'package:${PACKAGE_NAME}/${MODULE_IMPORT_PATH}/${MODULE_NAME}_controller.dart';

class ${MODULE_CAPITALIZED}Binding extends Bindings {
  @override
  void dependencies() {
    Get.lazyPut(() => ${MODULE_CAPITALIZED}Controller());
  }
}
EOF
)

BINDING_PATH="$MODULE_PATH/${MODULE_NAME}_binding.dart"
echo "$BINDING_CONTENT" > "$BINDING_PATH" || {
    echo "错误: 无法创建binding文件"
    exit 1
}
echo "已创建binding: $BINDING_PATH"

# 创建page文件
PAGE_CONTENT=$(cat <<EOF
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:${PACKAGE_NAME}/core/annotations/getx_route_enhanced.dart';
import 'package:${PACKAGE_NAME}/${MODULE_IMPORT_PATH}/${MODULE_NAME}_controller.dart';
import 'package:${PACKAGE_NAME}/${MODULE_IMPORT_PATH}/${MODULE_NAME}_binding.dart';

@GetXRoute(
  '/${MODULE_NAME}',
  binding: ${MODULE_CAPITALIZED}Binding,
)
class ${MODULE_CAPITALIZED}Page extends GetView<${MODULE_CAPITALIZED}Controller> {
  const ${MODULE_CAPITALIZED}Page({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold();
  }
}
EOF
)

PAGE_PATH="$MODULE_PATH/${MODULE_NAME}_page.dart"
echo "$PAGE_CONTENT" > "$PAGE_PATH" || {
    echo "错误: 无法创建page文件"
    exit 1
}
echo "已创建page: $PAGE_PATH"

# 执行路由生成脚本
if ! $SKIP_ROUTES; then
    GENERATE_ROUTES_PATH="$PROJECT_PATH/scripts/generate_routes.sh"

    if [ -f "$GENERATE_ROUTES_PATH" ]; then
        echo -e "\n正在执行generate_routes.sh..."
        bash "$GENERATE_ROUTES_PATH" || {
            echo "警告: 执行generate_routes.sh时出错"
        }
        echo "路由生成完成"
    else
        echo "警告: 未找到generate_routes.sh脚本: $GENERATE_ROUTES_PATH"
    fi
fi

echo -e "\nGetX模块 '$MODULE_NAME' 创建成功!"